use clap::Parser;
#[derive(Debug,Parser)]
pub struct CsvOpts{
    //default_value 表示input的默认值
    //short 表示 input可以简写成-i
    //value_parser 用于校验 verify_input这个函数 判断input(一个文件名是否存在)
    #[arg(short,long,default_value = "input.json",value_parser = verify_input)]
    pub input: String,
    #[arg(short,long,default_value = "output.json")]
    pub output: String,
    #[arg(short, long , default_value = ",")]
    //这里的short等价于 -d
    pub delimiter: char,
    #[arg(long,default_value = "true")]
    pub header: bool,

}

//定义一个struct opts
#[derive(Debug,Parser)]
#[command(name = "rcli",version = "0.0.1",author = "Haoduoduo")]
pub struct Opts {
    #[command(subcommand)]
    pub cmd: Subcommand,
}

#[derive(Debug,Parser)]
pub enum Subcommand{
    #[command(name = "csv", about = "Convert CSV to json" )]
    Csv(CsvOpts),
}



fn verify_input(file_name: &str) ->Result<String,String>{
    //判断文件是否存在
    //通过name space
    if std::path::Path::new(file_name).exists(){
        Ok(file_name.into())
    }else {
        Err("Files does not exists".into())
    }
}


// fn verify_input_(file_name: &str) ->Result<String, &'static str>{
//     //&'static str 的生命周期和进程的生命周期是一样的
//     //判断文件是否存在
//     //通过name space
//     if std::path::Path::new(file_name).exists(){
//         Ok(file_name.into())
//     }else {
//         Err("Files does not exists")
//     }
// }